/* Copyright (c) [2020] [ylc]. Licensed under Apache-2.0 License. */

#ifndef __SD3078_H
#define __SD3078_H

#include "my_define.h"

#define 	SD_I2C_ADDR		0x64

/******************** Alarm register ********************/
#define		XRTC_Alarm_SC				0x07
#define		XRTC_Alarm_MN				0x08
#define		XRTC_Alarm_HR				0x09
#define		XRTC_Alarm_WK				0x0A
#define		XRTC_Alarm_DY				0x0B
#define		XRTC_Alarm_MO				0x0C
#define		XRTC_Alarm_YR				0x0D
#define		XRTC_Alarm_EN				0x0E

/******************** Control Register *******************/
#define		XRTC_CTR1            0x0F
#define		XRTC_CTR2            0x10
#define		XRTC_CTR3            0x11

/***************** Timer Counter Register ****************/
#define		XRTC_Timer_Counter1	0x13
#define		XRTC_Timer_Counter2	0x14
#define		XRTC_Timer_Counter3	0x15

/******************** Battery Register ********************/
#define		XRTC_Chg_MG          0x18		//充电管理寄存器地址
#define		XRTC_Bat_H8          0x1A		//电量最高位寄存器地址
#define		XRTC_Bat_L8          0x1B		//电量低八位寄存器地址

/*********************** ID Register **********************/
#define		XRTC_ID_Address			0x72		//ID号起始地址

/********************** 报警中断宏定义 *********************/
#define		XRTC_sec_ALM					0x01
#define		XRTC_min_ALM					0x02
#define		XRTC_hor_ALM					0x04
#define		XRTC_wek_ALM					0x08
#define		XRTC_day_ALM					0x10
#define		XRTC_mon_ALM					0x20
#define		XRTC_yar_ALM					0x40

/********************** 中断使能宏定义 **********************/
#define		XRTC_INTDE						0x04		//倒计时中断
#define		XRTC_INTAE						0x02		//报警中断
#define		XRTC_INTFE						0x01		//频率中断

/********************** 中断演示宏定义 **********************/
#define 	XRTC_FREQUENCY				0				//频率中断
#define 	XRTC_ALARM						1			//报警中断
#define 	XRTC_COUNTDOWN				2				//倒计时中断
#define 	XRTC_DISABLE					3			//禁止中断

/*************** 中断输出类型选择，请自行选择 ****************/
#define 	XRTC_INT_TYPE			COUNTDOWN //定义中断输出类型


/*此结构体定义了倒计时中断可供配置的频率源、IM和初值主要参数*/
/***************** Timer Counter Register ****************/
#define		XRTC_Timer_Counter1	0x13
#define		XRTC_Timer_Counter2	0x14
#define		XRTC_Timer_Counter3	0x15

/******************** Battery Register ********************/
#define		XRTC_Chg_MG          0x18		//充电管理寄存器地址
#define		XRTC_Bat_H8          0x1A		//电量最高位寄存器地址
#define		XRTC_Bat_L8          0x1B		//电量低八位寄存器地址

/*********************** ID Register **********************/
#define		XRTC_ID_Address			0x72		//ID号起始地址

/********************** 报警中断宏定义 *********************/
#define		XRTC_sec_ALM					0x01
#define		XRTC_min_ALM					0x02
#define		XRTC_hor_ALM					0x04
#define		XRTC_wek_ALM					0x08
#define		XRTC_day_ALM					0x10
#define		XRTC_mon_ALM					0x20
#define		XRTC_yar_ALM					0x40

/********************** 中断使能宏定义 **********************/
#define		XRTC_INTDE						0x04		//倒计时中断
#define		XRTC_INTAE						0x02		//报警中断
#define		XRTC_INTFE						0x01		//频率中断

/********************** 中断演示宏定义 **********************/
#define 	XRTC_FREQUENCY				0				//频率中断
#define 	XRTC_ALARM						1			//报警中断
#define 	XRTC_COUNTDOWN				2				//倒计时中断
#define 	XRTC_DISABLE					3			//禁止中断

/*************** 中断输出类型选择，请自行选择 ****************/
#define 	XRTC_INT_TYPE			COUNTDOWN //定义中断输出类型

enum XRTC_Freq{F_0Hz, F32KHz, F4096Hz, F1024Hz, F64Hz, F32Hz, F16Hz, F8Hz, \
					F4Hz, F2Hz, F1Hz, F1_2Hz, F1_4Hz, F1_8Hz, F1_16Hz, F_1s};

enum XRTC_clk_Souce{S_4096Hz, S_1024Hz, S_1s, S_1min};

/*此结构体定义了倒计时中断可供配置的频率源、IM和初值主要参数*/
typedef	struct
{
	enum XRTC_clk_Souce d_clk;
	u8   IM;	//IM=1:周期性中断
	u32  init_val;
} XRTC_CountDown_Def;

/*此结构体定义了时间信息包括年、月、日、星期、时、分、秒*/
typedef	struct
{
	u8	second;
	u8	minute;
	u8	hour;
	u8	week;
	u8	day;
	u8	month;
	u8	year;
} XRTC_Time_Def;

void sd3078_init(void);
void sd_set_time(u32 timestamp);
void sd_get_time(u32 *timestamp);
void sd_set_countdown_it(XRTC_CountDown_Def *CountDown_Init);
void sd_set_alarm_it(u8 Enable_config, XRTC_Time_Def *psRTC);
void sd_set_frq_it(enum XRTC_Freq F_Out);
void sd_clear_it(u8 int_EN) ;

#endif